/*
 * @version: 1.0
 * @Author: zhl
 * @Date: 2021-09-02 17:12:33
 * @LastEditors: zhl
 * @LastEditTime: 2021-09-03 10:11:42
 * @Description: file content
 */

#ifndef __C_THREAD_POOL_H__
#define __C_THREAD_POOL_H__

#include <pthread.h>
#include <stdint.h>
#include "threadLock.h"

/**
 * @brief : 任务接口类，定义了任务的基本接口
 */
typedef void* (*TF_THREAD_FUNC_RUN)();

typedef struct _taskData{
	void* data;
	int   len;
}T_TASK_DATA;

/**
 * @brief : 任务数据类型
 */
typedef struct _task{
	T_TASK_DATA data; //任务数据
	TF_THREAD_FUNC_RUN run; //任务执行函数
    struct _task* prev; //任务链表前驱指针
	struct _task* next; //任务链表后驱指针
}T_TASK;
/**
 * @Description: 线程池线程信息
 */
typedef struct _threadInfo{
    pthread_t m_thread; //线程句柄
	T_THREAD_LOCK m_lock; //线程锁
    T_TASK* m_task_list; //任务队列
	T_TASK* m_task_list_tail; //任务队列尾
    int  m_thread_idx;    //线程池分配给该线程的索引编号
}T_THREAD_INFO;

/**
 * @Description: 初始化现场池
 * @param[in]  num: 处理线程数量
 * @return: 无
 */
extern int threadPoolInit(int num);

/**
 * @function: 向线程池中添加任务
 */
extern void push_task(T_TASK* task);

#endif /* __C_THREAD_POOL_H__ */
